perm filename UF[AM,DBL] blob sn#462854 filedate 1979-07-26 generic text, type T, neo UTF8
(FILECREATED "10-Nov-78 20:18:53" <LENAT>UF.;2 4052   

     changes to:  CODE PARENTS LIST-IF-NONNULL UFFNS

     previous date: "10-Nov-78 17:22:12" <MOLGEN>UF.;2)


(PRETTYCOMPRINT UFCOMS)

(RPAQQ UFCOMS [(FNS * UFFNS)
	       (P (CHANGE-FAULTEVAL)
		  (CHANGE-FAULTAPPLY))
	       (DECLARE: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA NEW-FAULTEVAL)
										     (NLAML])

(RPAQQ UFFNS (NEW-FAULTAPPLY NEW-FAULTEVAL CHANGE-FAULTAPPLY CHANGE-FAULTEVAL CODEBACK CODE PARENTS LIST-IF-NONNULL))
(DEFINEQ

(NEW-FAULTAPPLY
  [LAMBDA (FAULTFN FAULTARGS)

          (* Allows one to type (APPLY* s u) in place of (GETVALUE s u), and to type (APPLY* s u f) in place of 
	  (GETVALUE f s u); also works for APPLY)


    (SELECTQ (FLENGTH FAULTARGS)
	     (1 UA.ERRNO←NIL
		(if FAULTFN='CLISP:
		    then (ORIG-FAULTAPPLY FAULTFN FAULTARGS)
		  elseif (GETFIELD 'VALUE FAULTFN FAULTARGS:1)
		  elseif UA.ERRNO=NIL
		    then NIL
		  elseif (AND (ANCESTOR? FAULTFN (QUOTE VSLOT))
			      (CODE FAULTFN)
			      (GETD FAULTFN))
		    then (APPLY FAULTFN FAULTARGS)
		  else (ORIG-FAULTAPPLY FAULTFN FAULTARGS)))
	     (2 UA.ERRNO←NIL
		(if FAULTFN='CLISP:
		    then (ORIG-FAULTAPPLY FAULTFN FAULTARGS)
		  elseif (GETFIELD FAULTARGS:2 FAULTFN FAULTARGS:1)
		  elseif UA.ERRNO=NIL
		    then NIL
		  elseif (AND (ANCESTOR? FAULTFN (QUOTE VSLOT))
			      (CODE FAULTFN)
			      (GETD FAULTFN))
		    then (APPLY FAULTFN FAULTARGS)
		  else (ORIG-FAULTAPPLY FAULTFN FAULTARGS)))
	     (ORIG-FAULTAPPLY FAULTFN FAULTARGS])

(NEW-FAULTEVAL
  [NLAMBDA FAULTX

          (* Allows one to type (CREATOR u) in place of (GETVALUE (QUOTE CREATOR) u), and to type 
	  (CREATOR u f) in place of (GETFIELD f (QUOTE CREATOR) u))


    (SELECTQ (LENGTH FAULTX)
	     (2 UA.ERRNO←NIL
		(if FAULTX:1='CLISP:
		    then (APPLY 'ORIG-FAULTEVAL FAULTX)
		  elseif (GETFIELD 'VALUE FAULTX:1 (EVAL FAULTX:2))
		  elseif UA.ERRNO=NIL
		    then NIL
		  elseif (AND (ANCESTOR? FAULTX:1 (QUOTE VSLOT))
			      (CODE FAULTX:1)
			      (GETD FAULTX:1))
		    then (EVAL FAULTX)
		  else (APPLY 'ORIG-FAULTEVAL FAULTX)))
	     (3 UA.ERRNO←NIL
		(if FAULTX:1='CLISP:
		    then (APPLY 'ORIG-FAULTEVAL FAULTX)
		  elseif (GETFIELD (EVAL FAULTX:3)
				   FAULTX:1
				   (EVAL FAULTX:2))
		  elseif UA.ERRNO=NIL
		    then NIL
		  elseif (AND (ANCESTOR? FAULTX:1 (QUOTE VSLOT))
			      (CODE FAULTX:1)
			      (GETD FAULTX:1))
		    then (EVAL FAULTX)
		  else (APPLY 'ORIG-FAULTEVAL FAULTX)))
	     (APPLY 'ORIG-FAULTEVAL FAULTX])

(CHANGE-FAULTAPPLY
  [LAMBDA NIL
    (if }(GETD 'ORIG-FAULTAPPLY)
	then (PUTD 'ORIG-FAULTAPPLY (GETD 'FAULTAPPLY)))
    (PUTD 'FAULTAPPLY (GETD 'NEW-FAULTAPPLY])

(CHANGE-FAULTEVAL
  [LAMBDA NIL
    (if }(GETD 'ORIG-FAULTEVAL)
	then (PUTD 'ORIG-FAULTEVAL (GETD 'FAULTEVAL)))
    (PUTD 'FAULTEVAL (GETD 'NEW-FAULTEVAL])

(CODEBACK
  [LAMBDA (UNIT)
    (CLISP: FAST)

          (* This takes the type of combiner (STYPE) and the arguments out of which the new virtual slot is to be built 
	  (BUILT-FROM), and applies the former to the latter)


    (DEFINE <UNIT ! (OR (NLSETQ (APPLY (STYPE UNIT)
				       (GET-LIST 'BUILT-FROM UNIT)))
			(ERROR!)) >)
    (PUTVALUE 'CODE UNIT UNIT)
    (CLASSIFY UNIT 'LISP])

(CODE
  [LAMBDA (UNIT)
    (CLISP: FAST)

          (* This takes the type of combiner (STYPE) and the arguments out of which the new virtual slot is to be built 
	  (BUILT-FROM), and applies the former to the latter)


    (DEFINE <<UNIT ! (OR (NLSETQ (APPLY (STYPE UNIT)
					(GET-LIST 'BUILT-FROM UNIT)))
			 (ERROR!)) >>)
    (PUTVALUE 'CODE UNIT UNIT)
    (CLASSIFY UNIT 'LISP])

(PARENTS
  [LAMBDA (UNIT)
    (LIST-IF-NONNULL (PARENT UNIT])

(LIST-IF-NONNULL
  [LAMBDA (X)
    (AND X <X>])
)
(CHANGE-FAULTEVAL)
(CHANGE-FAULTAPPLY)
(DECLARE: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS 

(ADDTOVAR NLAMA NEW-FAULTEVAL)

(ADDTOVAR NLAML )
)
(DECLARE: DONTCOPY
  (FILEMAP (NIL (536 3866 (NEW-FAULTAPPLY 548 . 1587) (NEW-FAULTEVAL 1591 . 2606) (CHANGE-FAULTAPPLY 2610 . 2775) (CHANGE-FAULTEVAL
2779 . 2938) (CODEBACK 2942 . 3344) (CODE 3348 . 3743) (PARENTS 3747 . 3810) (LIST-IF-NONNULL 3814 . 3863)))))
STOP